﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.IO;
using System.Net.Mail;
using System.Web.Services;
using Facebook;
using Twitterizer;

namespace haber.classes
{
    public class statics
    {
        static long facebookToplam = 0;
        static long twitterToplam = 0;
        public static void twitterGonder(int haberID)
        {
            using (dcHaberDataContext dc = new dcHaberDataContext())
            {
                var gonderimler = from g in dc.HaberGonderims
                                  where g.HaberID == haberID
                                  select g;

                twitterOauth to = new twitterOauth();
                foreach (var gon  in gonderimler)
                {
                    OAuthTokens ot = new OAuthTokens();
                    ot.AccessToken = gon.HaberKategorileri.TwitterAccessToken;
                    ot.AccessTokenSecret = gon.HaberKategorileri.TwitterAccessTokenSecret;
                    ot.ConsumerKey = to.ConsumerKey;
                    ot.ConsumerSecret = to.ConsumerSecret;
                    string h = "";
                    if (gon.Haber.Baslik.Length > 120)
                    {
                        h = gon.Haber.Baslik.Substring(0, 120);
                    }
                    else
                    {
                        h = gon.Haber.Baslik;
                    }


                    h = h + " " + gon.Haber.KisaUrl;
                    TwitterResponse<TwitterStatus> tr = TwitterStatus.Update(ot, h);

                    if (tr.Result == RequestResult.Success)
                    {
                        // Tweet posted successfully!
                        //_log.InfoFormat("Posted a tweet #{0}.", tweetResponse.ResponseObject.Id);
                    }
                    else
                    {
                      //  err += tr.Result + "   /   " + tr.ErrorMessage;

                    }



                }

            }
        }



        public static void facebookGonder(int haberID)
        {

            using (dcHaberDataContext dc = new dcHaberDataContext())
            {
                var gonderimler = from g in dc.HaberGonderims
                                  where g.HaberID == haberID
                                  select g;
                foreach (var gon in gonderimler) 
                {
                    String haberResmi = "http://www.sosyalmedyahaber.org/video.png";
                    var eks = from e in dc.HaberEklers
                              where e.HaberID == haberID
                              select e;
                    if (eks.Count() > 0)
                    {
                        List<HaberEkler> he = eks.ToList();
                        if (he.ElementAt(0).Tip == 'R')
                        {
                            haberResmi = "http://www.sosyalmedyahaber.org/haberEkleri/" + haberID + "/" + he.ElementAt(0).Ek;
                        }
                    }
                  
                    if (gon.HaberKategorileri.FBToken != null && gon.HaberKategorileri.FBToken != "") { 
                        FacebookClient fbClient = new FacebookClient(gon.HaberKategorileri.FBToken); // Duvar
                        var args = new Dictionary<string, object>();
                        args["message"] = "Sosyal Medya Haber";
                        args["link"] = "http://www.sosyalmedyahaber.org/Default.aspx?hid=" + haberID + "&katid=" + gon.HaberKategorileri.KategoriID;
                        args["description"] = gon.Haber.Ozet;
                        args["picture"] = haberResmi;
                        args["caption"] = "http://www.sosyalmedyahaber.org http://www.sosyalmedyahaber.tv";
                        fbClient.Post("/" + gon.HaberKategorileri.FBUID + "/feed", args);
                        fbClient = new FacebookClient(gon.HaberKategorileri.FBPageToken);
                        fbClient.Post("/" + gon.HaberKategorileri.FBPageID + "/feed", args);
                       
                    }
                }
            }

            ;
        }
        public static string sosyalkullanicisayilari()
        {
         var hata="";
         facebookToplam = 0;
         twitterToplam = 0;
         //hata +="Facebook : " +  facebookToplamiGetir();
         hata += "\nTwitter :"+  twitterToplamiGetir();
         return hata;
        }
        public static string facebookToplamiGetirV2(int sayfa)
        {
            string facehata = "";
            facebookToplam = 0;
            using (dcHaberDataContext dc = new dcHaberDataContext())
            {
                var kategoriler = from k in dc.HaberKategorileris
                                  where k.FBToken != null
                                  select k;

                foreach (var kat in kategoriler.Skip(sayfa * 50).Take(50).ToList())
                {
                    try
                    {
                        var fb = new FacebookClient(kat.FBToken);
                        string query = string.Format("SELECT friend_count FROM user WHERE uid='{0}'", kat.FBUID);
                        dynamic result = fb.Query(query);
                        if (result[0]["friend_count"] > 0)
                        {
                            facebookToplam += result[0]["friend_count"];
                        }
                        if (kat.FBPageID != null)
                        {
                            query = string.Format("SELECT fan_count FROM page WHERE page_id='{0}'", kat.FBPageID);
                            result = fb.Query(query);
                            if (result[0]["fan_count"] > 0)
                            {
                                facebookToplam += result[0]["fan_count"];
                            }
                        }
                    }
                    catch (Exception)
                    {
                        facehata += kat.KategoriAdi + ",";
                    }
                }
                if (sayfa == 0)
                {
                    tanimaEkle(facebookToplam, true);
                }
                else
                {
                    tanimaEkle(facebookToplam, false);
                }
                //var tanimlar = from t in dc.Tanimlars
                //               where t.Tanım == "FACEBOOKTOPLAM"
                //               select t;
                //tanimlar.First().Parametre = facebookToplam.ToString();
                //dc.SubmitChanges();
                return facehata;
            }
        }
        static void tanimaEkle(long sayi,bool yeni)
        {
            using (dcHaberDataContext dc = new dcHaberDataContext())
            {
                var tanimlar = from t in dc.Tanimlars
                               where t.Tanım == "FACEBOOKTOPLAM"
                               select t;
                if (!yeni)
                {
                    tanimlar.First().Parametre = (int.Parse(tanimlar.First().Parametre) + sayi).ToString();
                }
                else
                {
                    tanimlar.First().Parametre = sayi.ToString();
                }
                dc.SubmitChanges();
                
            }
            
        }
        static string facebookToplamiGetir()
        {
            string facehata = "";
            using (dcHaberDataContext dc = new dcHaberDataContext())
            {
                var kategoriler = from k in dc.HaberKategorileris
                                  where k.FBToken != null
                                  select k;
                foreach (var kat in kategoriler)
                {
                    try
                    {
                        var fb = new FacebookClient(kat.FBToken);
                        string query = string.Format("SELECT friend_count FROM user WHERE uid='{0}'", kat.FBUID);
                        dynamic result = fb.Query(query);
                        if (result[0]["friend_count"] > 0)
                        {
                            facebookToplam += result[0]["friend_count"];
                        }
                        if (kat.FBPageID != null)
                        {
                            query = string.Format("SELECT fan_count FROM page WHERE page_id='{0}'", kat.FBPageID);
                            result = fb.Query(query);
                            if (result[0]["fan_count"] > 0)
                            {
                                facebookToplam += result[0]["fan_count"];
                            }
                        }
                    }
                    catch (Exception)
                    {
                        facehata += kat.KategoriAdi + ",";
                    }
                }
                var tanimlar = from t in dc.Tanimlars
                               where t.Tanım == "FACEBOOKTOPLAM"
                               select t;
                tanimlar.First().Parametre = facebookToplam.ToString();
                dc.SubmitChanges();
                return facehata;
            }
        }
        static string twitterToplamiGetir()
        {
            string twithata = "";
            using (dcHaberDataContext dc = new dcHaberDataContext())
            {
                var kat = from k in dc.HaberKategorileris
                          where k.TwitterAccessTokenSecret != null
                          select k;
                foreach (var hk in kat)
                {
                  

                    
                    twitterOauth to = new twitterOauth();
                    OAuthTokens tokens = new OAuthTokens();
                    tokens.ConsumerKey = to.ConsumerKey;
                    tokens.ConsumerSecret = to.ConsumerSecret;
                    tokens.AccessToken = hk.TwitterAccessToken;
                    tokens.AccessTokenSecret = hk.TwitterAccessTokenSecret;
                    TwitterResponse<TwitterUser> twitUser = TwitterUser.Show(tokens, hk.TwitterScreenName);
                    if (twitUser.Result == RequestResult.Success)
                    {
                        twitterToplam += (twitUser.ResponseObject.NumberOfFollowers.HasValue ? twitUser.ResponseObject.NumberOfFollowers.Value : 0);

                    }
                    else
                    {
                        twithata += hk.KategoriAdi + ",";
                        // twitUser.ErrorMessage;
                        // return null;
                    }
                }

                var tanimlar = from t in dc.Tanimlars
                               where t.Tanım == "TWITTOPLAM"
                               select t;
                tanimlar.First().Parametre = twitterToplam.ToString();
                dc.SubmitChanges();
                return twithata;
            }
        }

        public static void tanimlarayaz(string tanim, string deger)
        {
            using (dcHaberDataContext dc = new dcHaberDataContext())
            {
                var tanimlar = from t in dc.Tanimlars
                               where t.Tanım == tanim
                               select t;
                tanimlar.First().Parametre = deger;
                dc.SubmitChanges();    
            }
            
        }

            public static void mailGonder(string mail,string konu,string mesaj)
            {
                try
                {
                            MailMessage email = new MailMessage();
                            email.From = new MailAddress("can@optimumgrafik.com");
                            email.To.Add(new MailAddress(mail));
                            email.Subject = konu;
                            email.Body = mesaj;
                            email.IsBodyHtml = true;
                            try
                            {
                                SmtpClient client = new SmtpClient();
                                client.Send(email);

                            }
                            catch (Exception ex)
                            {
                                throw new Exception("Mail gönderilirken hata :" + ex.Message);
                            }
                    
                }
                catch (Exception ex)
                {
                    throw new Exception("Mail gönderilirken hata :" + ex.Message);
                }

            }
        public static string ipAdresiGetir()
        {
            string ip;

            ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
            if (ip == string.Empty || ip == null)
            {
                ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
            }

            return ip;
        }

        public static string tanimGetir(string tanimID,Boolean arttir)
        {
            using (dcHaberDataContext dc = new dcHaberDataContext())
            {
                var param = from p in dc.Tanimlars
                            where p.Tanım == tanimID
                            select p;
                if (param.Count() > 0)
                {
                    string parametre="";
                     parametre = param.First().Parametre;
                    if (arttir){
                        param.First().Parametre = (int.Parse(parametre) + 1).ToString();
                        dc.SubmitChanges();
                    }

                    return parametre;
                }
                else
                {
                    return null;
                }
            }

        }
        public static void dosyaSil(string dosya)
        {

            try
            {
                FileInfo TheFile = new FileInfo(dosya);
                if (TheFile.Exists)
                {
                    File.Delete(dosya);
                }
                else
                {
                    //throw new FileNotFoundException();
                }
            }
            catch (Exception)
            {
                //
            }


        }
        public static char dosyaTipiDondur(string dosyaAdi)
        {
            string uzanti = Path.GetExtension(dosyaAdi);
            if (uzanti == ".flv" || uzanti == ".mp4" || uzanti == ".webm")
            {
                return 'V';
            }
            else if (uzanti == ".jpg"|| uzanti == ".gif" ||uzanti == ".png" || uzanti == ".jpeg")
            {
                return 'R';
            }else{
               return ' ';
            }
        }

        public static Boolean kategoriYetkiKontrol(int kategoriID)
        {
            if (KullaniciGrubuGetir() == "Yonetici")
            {
                return true;
            }
            else
            {
                using (dcHaberDataContext dc = new dcHaberDataContext())
                {
                    var yetki = from y in dc.KategoriYetkis
                                where y.KullaniciID == kullaniciGetir() && y.KategoriID == kategoriID
                                select y;
                    if (yetki.Count() > 0)
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
            }
        }

        public static Guid kullaniciGetir()
        {

            MembershipUser m = Membership.GetUser();
          
            
            return (Guid)m.ProviderUserKey;
        }

        public static String KullaniciGrubuGetir()
        {
            Guid kullanicikodu;
            MembershipUser kullanici = Membership.GetUser();
            if (kullanici != null)
            {
                kullanicikodu = (Guid)kullanici.ProviderUserKey;
                String[] roller = Roles.GetRolesForUser(kullanici.UserName);
                if (roller.Length > 0)
                {
                    return roller[0];
                }
                else
                {
                    return null;
                }
            }
            else
            {
                return null;
            }
        }
        public static String KullaniciGrubuGetir(string KullaniciAdi)
        {
            Guid kullanicikodu;
            MembershipUser kullanici = Membership.GetUser(KullaniciAdi);
            kullanicikodu = (Guid)kullanici.ProviderUserKey;
            String[] roller = Roles.GetRolesForUser(kullanici.UserName);
            if (roller.Length > 0)
            {
                return roller[0];
            }
            else
            {
                return null;
            }

        }
       
    }

}